Dependency Injection (DI) একটি ডিজাইন প্যাটার্ন যা সফটওয়্যার ডেভেলপমেন্টে ব্যবহৃত হয়, বিশেষ করে অ্যাপ্লিকেশনগুলিতে যেখানে বিভিন্ন ক্লাসের মধ্যে নির্ভরশীলতা (dependencies) থাকে। এই প্যাটার্নটির মাধ্যমে, ক্লাসগুলোর মধ্যে নির্ভরশীলতা সরাসরি ইনস্ট্যান্সিয়েট বা তৈরি করা না হয়ে, বাইরের কোনও উৎস (যেমন একটি IoC Container বা Dependency Injection Container) থেকে সরবরাহ করা হয়।
DI একটি গুরুত্বপূর্ণ কৌশল যা ক্লাসগুলোকে একে অপরের উপর নির্ভরশীলতা কমাতে সাহায্য করে এবং Loosely Coupled (অর্থাৎ, একে অপরের থেকে স্বাধীন) কোড তৈরিতে সহায়ক হয়।
Dependency Injection এমন একটি প্রক্রিয়া যেখানে একটি ক্লাস তার প্রয়োজনীয় ডিপেনডেন্সি (অথবা নির্ভরশীল অবজেক্ট) বাইরের একটি সোর্স থেকে পায়, না যে নিজে তা তৈরি করে। এটি Inversion of Control (IoC) এর একটি বিশেষ রূপ, যেখানে ক্লাস নিজে তার নির্ভরশীলতাগুলো তৈরি করার পরিবর্তে বাইরের একটি কনটেইনার বা ফ্যাক্টরি এসব নির্ভরশীলতা সরবরাহ করে।
ধরা যাক, একটি OrderService
ক্লাস আছে যা PaymentService
এবং CustomerService
এর উপর নির্ভরশীল। DI ব্যবহার না করলে, OrderService
নিজেই এই সেবাগুলোর ইনস্ট্যান্স তৈরি করবে। কিন্তু Dependency Injection এর মাধ্যমে, এই সেবাগুলোর ইনস্ট্যান্স সরবরাহ করা হয় বাইরের কোনও সোর্স থেকে (যেমন IoC Container)।
Constructor Injection:
উদাহরণ:
public class OrderService
{
private readonly IPaymentService _paymentService;
private readonly ICustomerService _customerService;
// Constructor Injection
public OrderService(IPaymentService paymentService, ICustomerService customerService)
{
_paymentService = paymentService;
_customerService = customerService;
}
}
এখানে, OrderService ক্লাসের কনস্ট্রাক্টরে PaymentService এবং CustomerService ইনজেক্ট করা হচ্ছে।
Property Injection:
উদাহরণ:
public class OrderService
{
public IPaymentService PaymentService { get; set; }
public ICustomerService CustomerService { get; set; }
// Property Injection
}
Method Injection:
উদাহরণ:
public class OrderService
{
public void ProcessOrder(IPaymentService paymentService, ICustomerService customerService)
{
// Process order using the injected services
}
}
একটি DI Container বা Inversion of Control (IoC) Container হল এমন একটি ফ্রেমওয়ার্ক বা লাইব্রেরি যা নির্ভরশীলতা পরিচালনা করে। এটি ক্লাসের নির্ভরশীলতাগুলো ইনজেক্ট করার কাজ সহজ করে দেয়। .NET Framework, ASP.NET Core, Spring (Java) এর মতো জনপ্রিয় ফ্রেমওয়ার্কগুলো এই ধরনের কন্টেইনার ব্যবহার করে।
ASP.NET Core এ DI কন্টেইনারের মাধ্যমে, আপনি কনস্ট্রাক্টর ইনজেকশন বা অন্য কোনো পদ্ধতি ব্যবহার করে নির্ভরশীলতা ইনজেক্ট করতে পারেন।
উদাহরণ:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Register dependencies
services.AddScoped<IPaymentService, PaymentService>();
services.AddScoped<ICustomerService, CustomerService>();
services.AddScoped<OrderService>();
}
}
এখানে, OrderService
এর নির্ভরশীলতাগুলি PaymentService
এবং CustomerService
DI কন্টেইনারে রেজিস্টার করা হচ্ছে।
Dependency Injection হল একটি প্যাটার্ন যা কোডের মধ্যে ক্লাসগুলোর মধ্যে নির্ভরশীলতা কমিয়ে দেয় এবং কোডকে আরও মেইনটেইনেবল ও টেস্টেবল করে তোলে। এটি বিভিন্ন ধরণের ইনজেকশন পদ্ধতির মাধ্যমে নির্ভরশীলতাগুলো সরবরাহ করে, যার মাধ্যমে কোডের নমনীয়তা বৃদ্ধি পায় এবং ফ্লেক্সিবিলিটি নিশ্চিত হয়। DI ব্যবহারের মাধ্যমে আপনি সহজেই ক্লাসের নির্ভরশীলতা ম্যানেজ করতে পারেন এবং ডিপেনডেন্সি চেইন তৈরির ঝামেলা এড়িয়ে যেতে পারেন।
common.read_more